package com.yociyy.admin.controller;

import java.util.Map;

import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.StrUtil;
import com.github.pagehelper.PageHelper;
import com.yociyy.admin.biz.BaseRoleBiz;
import com.yociyy.common.core.msg.R;
import com.yociyy.common.core.msg.TableR;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import com.yociyy.admin.model.constant.UserConstants;
import com.yociyy.admin.model.entity.BaseRole;

/**
 * 系统管理-角色信息管理
 *
 * @author Y.yang
 * @date 2019/12/2
 */
@RestController
@RequestMapping("role")
public class BaseRoleController {

	@Autowired
	private BaseRoleBiz roleBiz;

	/**
	 * 角色信息分页
	 *
	 * @param params 条件查询参数
	 * @return 角色信息列表分页
	 */
	@GetMapping("/page")
	public TableR page(@RequestParam Map<String, Object> params) {
		PageHelper.startPage(params);
		return new TableR(roleBiz.selectRoleAll());
	}

	/**
	 * 查询全部角色信息
	 *
	 * @return 角色信息列表
	 */
	@GetMapping("/all")
	public R all() {
		return R.success(roleBiz.selectRoleAll());
	}

	/**
	 * 新增角色信息
	 *
	 * @param role 角色信息对象
	 * @return 结果
	 */
	@PostMapping
	public R addRole(@RequestBody BaseRole role) {
		// 新增角色信息
		roleBiz.insertRole(role);
		return R.success();
	}

	/**
	 * 更新角色信息
	 *
	 * @param role 角色信息对象
	 * @return 结果
	 */
	@PutMapping
	public R putRole(@RequestBody BaseRole role) {
		roleBiz.updateRole(role);
		return R.success();
	}

	/**
	 * 删除角色信息
	 *
	 * @param ids 角色id
	 * @return 结果
	 */
	@DeleteMapping
	public R delRole(@RequestParam String ids) {
		long[] idArray = StrUtil.splitToLong(ids, ',');
		for (long roleId : idArray) {
			if (roleBiz.countRoleUserByRoleId(roleId) > 0) {
				BaseRole role = roleBiz.selectRoleByRoleId(roleId);
				return R.error("%1$s已分配给用户，请解除用户关联后再试", role.getRoleName());
			}
		}
		roleBiz.deleteByIds(idArray);
		return R.success();
	}

	/**
	 * 查询角色信息通过id
	 *
	 * @param id 角色id
	 * @return 结果
	 */
	@GetMapping("/get/{id}")
	public R getRole(@PathVariable int id) {
		// return R.success(roleBiz.selectById(id));
		return null;
	}

	/**
	 * 角色信息菜单授权关联
	 *
	 * @param role 角色信息
	 * @return 结果
	 */
	@PostMapping("/perms")
	public R saveRolePerms(@RequestBody BaseRole role) {
		roleBiz.saveRolePerms(role);
		return R.success();
	}

	/**
	 * 角色名称唯一性校验
	 *
	 * @return 结果
	 */
	@PostMapping("/check")
	public R check(@RequestBody BaseRole role) {
		if (StrUtil.isNotEmpty(role.getRoleName()) && UserConstants.USER_NAME_NOT_UNIQUE.equals(roleBiz.checkRoleNameUnique(role))) {
			return R.error("角色名称 '" + role.getRoleName() + "'已存在");
		}
		return R.success();
	}

	/**
	 * 角色信息数据授权关联
	 *
	 * @param role 角色信息
	 * @return 结果
	 */
	@PostMapping("/scope")
	public R saveAuthDataScope(@RequestBody BaseRole role) {
		roleBiz.saveAuthDataScope(role);
		return R.success();
	}
}